package cn.iocoder.yudao.module.api.product.evaluation;

import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.api.product.evaluation.dto.ProductEvaluationCreateReqDTO;
import cn.iocoder.yudao.module.api.product.evaluation.dto.ProductEvaluationRespDTO;

import java.util.Map;
import java.util.Set;

/**
 * 产品评价 API 接口
 *
 * @author HUIHUI
 */
public interface ProductEvaluationApi {

    /**
     * 创建评论
     *
     * @param userId 用户编号
     * @param dto 评论参数
     * @return 返回评论创建后的 id
     */
    Long createComment(Long userId, ProductEvaluationCreateReqDTO dto);

    /**
     * 根据店铺编号，计算店铺评分
     *
     * @param shopId 店铺编号
     * @return 店铺评分
     */
    float calculateScoreByShopId(Long shopId);

    /**
     * 根据店铺编号，计算店铺评分
     *
     * @param shopIds 店铺编号集合
     * @return 产品评分
     */
    Map<Long, Float> batchCalculateScoreByShopIds(Set<Long> shopIds);

    /**
     * 获得我的产品评价分页
     *
     * @param userId 用户编号
     * @param pageVO  分页查询
     * @return 产品评价分页
     */
    PageResult<ProductEvaluationRespDTO> getMyCommentPage(Long userId, PageParam pageVO);

    /**
     * 获得产品评价数
     *
     * @param shopId 店铺编号
     * @return 产品评价数
     */
    Map<String, Integer> getCommentCount(Long shopId);

    /**
     * 批量获得指定店铺的产品评价数
     *
     * @param shopIds 店铺编号列表
     * @return 产品评价数
     */
    Map<Long, Integer> getCommentCountMapByShopIds(Set<Long> shopIds);

}
